<template>
    <li>
        <label>
            <input type="checkbox" :checked="todos.done" @change="handleCheck(todos.id)"/>
            <!-- 如下代码也能实现功能，但是不太推荐，因为有点违反原则，因为修改了props -->
            <!-- <input type="checkbox" v-model="todo.done"/> -->
            <span v-show="!todos.isEdit">{{ todos.title }}</span>
            <input type="text"
                v-show="todos.isEdit"
                :value="todos.title"
                @blur="handleBlur(todos,$event)"
                ref="inputTitle"
            />
        </label>
        <button class="btn btn-danger" @click="handleDelete(todos.id)">删除</button>
        <button class="btn btn-edit" v-show="!todos.isEdit" @click="handleEdit(todos)">编辑</button>
    </li>
</template>

<script>
export default {
  name: 'TodoItem',
  // 声明接受todo对象
  //   props: ['todos', 'checkTodo', 'deleteTodo'],
  props: ['todos'],
  methods: {
    // 勾选or取消勾选
    handleCheck (id) {
      // 通知TodoAll组件将对应的todo对象的done值取反
      //   this.checkTodo(id)
      this.$bus.$emit('checkTodo', id)
    },
    // 删除条目
    handleDelete (id) {
      if (confirm('确定删除该任务吗？')) {
        // this.deleteTodo(id)
        this.$bus.$emit('deleteTodo', id)
      }
    },
    handleEdit (todos) {
      if (todos.hasOwnProperty('isEdit')) {
        todos.isEdit = true
      } else {
        this.$set(todos, 'isEdit', true)
      }
      this.$nextTick(() => {
        this.$refs.inputTitle.focus()
      })
    },
    // 失去焦点回调（真正执行修改逻辑）
    handleBlur (todos, e) {
      todos.isEdit = false
      if (!e.target.value.trim()) return alert('输入不能为空！')
      this.$bus.$emit('updateTodo', todos.id, e.target.value)
    }
  }
}
</script>

<style scoped>
/*item*/
li {
    list-style: none;
    height: 36px;
    line-height: 36px;
    padding: 0 5px;
    border-bottom: 1px solid #ddd;
}

li label {
    float: left;
    cursor: pointer;
}

li label li input {
    vertical-align: middle;
    margin-right: 6px;
    position: relative;
    top: -1px;
}

li button {
    float: right;
    display: none;
    margin-top: 3px;
}

li:before {
    content: initial;
}

li:last-child {
    border-bottom: none;
}

li:hover{
    background-color: #ddd;
}

li:hover button{
    display: block;
}
</style>
